package com.yungu.swift.system.finance.service;

import com.yungu.swift.base.ResponseData;
import com.yungu.swift.base.model.PageVo;
import com.yungu.swift.base.model.api.ApiPageParam;
import com.yungu.swift.base.service.BaseService;
import com.yungu.swift.system.finance.model.dto.FinanceOrderDto;
import com.yungu.swift.system.finance.model.param.AdminOrderFlowPageParam;
import com.yungu.swift.system.finance.model.param.AdminOrderPayParam;
import com.yungu.swift.system.finance.model.vo.FinanceOrderVo;
import com.yungu.swift.system.finance.model.vo.OrderPayDetailVo;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public interface FinanceOrderService extends BaseService<FinanceOrderDto> {
    /**
     * 订单支付查询
     *
     * @param orderFlowPageParam
     * @return
     */
    ResponseData<PageVo<FinanceOrderVo>> queryPageVo(AdminOrderFlowPageParam orderFlowPageParam);

    /**
     * 支付订单导出查询
     *
     * @param orderFlowPageParam
     * @return
     */
    ResponseData<List<FinanceOrderVo>> queryPageVoExport(AdminOrderFlowPageParam orderFlowPageParam);

    /**
     * 查询 已支付/未支付 订单量及金额
     *
     * @param orderFlowPageParam
     * @return
     */
    ResponseData<FinanceOrderVo> countPayOrder(AdminOrderFlowPageParam orderFlowPageParam);

    /**
     * 司机今日流水
     *
     * @param driverUuid
     * @return
     */
    ResponseData<BigDecimal> queryTodayTotalIncome4Driver(String driverUuid);

    /**
     * 司机收入
     *
     * @param map
     * @return
     */
    ResponseData<BigDecimal> findIncomeByTime(Map<String, Object> map);

    /**
     * 查询thawDay天之前司机抽成流水
     *
     * @param thawDay
     * @return
     */
    ResponseData<List<FinanceOrderDto>> findByThawDay(Integer thawDay);

    /**
     * 获取司机账单
     *
     * @param conditions
     * @param pageParam
     * @return
     */
    ResponseData<Map<String, Object>> driverBill(Map<String, Object> conditions, ApiPageParam pageParam);

    /**
     * 订单支付统计
     */
    ResponseData<PageVo<OrderPayDetailVo>> payDetail(AdminOrderPayParam adminOrderPayParam);

    /**
     * 订单支付统计导出
     */
    ResponseData<List<OrderPayDetailVo>> exportPayDetail(AdminOrderPayParam adminOrderPayParam);
}